import pandas as pd

df = pd.read_csv("测试数据集.csv")
df['data_time'] = pd.to_datetime(df['data_time'])

# 对需要的字段进行排序
df.sort_values(['ent_id', 'dev_name', 'data_time', 'yield_dev_id'], inplace=True)

# 创建一个新列来标识时间是否连续。检查每一行与其前一行之间的时间差是否等于15分钟。
df['time_diff'] = df.groupby(['ent_id', 'yield_dev_name', 'dev_name'])['data_time'].diff().dt.total_seconds().div(60).eq(15)

# 创建一个新的列来标识每个连续时间段。每当时间不连续时，都会开始一个新的时间段。
df['time_group'] = (~df['time_diff']).cumsum()

# 按照 ent_id, yield_dev_name, dev_name 和 time_group 进行分组，并计算每个组的持续时间（以15分钟为单位），以及开始时间和结束时间
result = df.groupby(['ent_id', 'yield_dev_name', 'dev_name', 'time_group']).agg({
    'data_time': ['size', 'min', 'max']  # size for duration, min for start_time, max for end_time
}).reset_index()

# 将持续时间转换为分钟并重命名列
result['duration'] = result['data_time']['size'] * 15
result['start_time'] = result['data_time']['min']
result['end_time'] = result['data_time']['max']

# 删除不必要的列
result.drop(columns=['time_group', ('data_time', 'size'), ('data_time', 'min'), ('data_time', 'max')], inplace=True)

print(result)

result.to_csv("当前的数据.csv")


# 获取每组中 duration 最大的值的索引
idx = result.groupby(['yield_dev_name', 'dev_name', 'start_time'])['duration'].idxmax()

# 只保留 duration 最大的行
result = result.loc[idx]

print(result)

result.to_csv("最终数据.csv")
